Чтобы в Select2
загрузить уже выбранные значения из базы данных, нужно передать массив значений, которые были сохранены в базе данных, в поле модели. Вот как это можно сделать:
1. Подготовка данных в контроллере
В контроллере получите список всех возможных участников ($participantList
) и уже выбранных участников ($model->participants
). Пример:
php
use yii\helpers\ArrayHelper;
use app\models\Participant;
// Получаем список всех участников
$participantList = ArrayHelper::map(Participant::find()->all(), 'id', 'name');
// Получаем уже выбранные значения из базы данных
$model->participants = [1, 2, 3]; // Пример: массив ID выбранных участников
2. Использование в виджете Select2
Передайте данные в виджет Select2
в представлении. Убедитесь, что поле модели ($model->participants
) содержит массив ID уже выбранных значений. Пример:
php
use kartik\select2\Select2;
echo $form->field($model, 'participants')->widget(Select2::class, [
'data' => $participantList, // Список всех участников
'options' => [
'placeholder' => 'Выберите участников...',
'multiple' => true, // Разрешаем множественный выбор
],
'pluginOptions' => [
'allowClear' => true, // Кнопка очистки
],
]);
3. Сохранение данных
При сохранении данных в базу убедитесь, что поле participants
обрабатывается как массив. Например, если вы используете ActiveRecord, можно сериализовать массив или сохранить его в связанной таблице. Пример сохранения в связанной таблице:
php
if ($model->load(Yii::$app->request->post()) && $model->save()) {
// Удаляем старые связи
ParticipantAssignment::deleteAll(['model_id' => $model->id]);
// Сохраняем новые связи
foreach ($model->participants as $participantId) {
$assignment = new ParticipantAssignment();
$assignment->model_id = $model->id;
$assignment->participant_id = $participantId;
$assignment->save();
}
}
4. Загрузка данных при редактировании
Когда вы редактируете запись, просто загрузите уже сохраненные значения в поле модели ($model->participants
), как показано в шаге 1. Select2 автоматически отобразит их как выбранные.